热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

椒盐|原图_图像处理:随机添加椒盐噪声和高斯噪声Python

篇首语:本文由编程笔记#小编为大家整理,主要介绍了图像处理:随机添加椒盐噪声和高斯噪声Python相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了图像处理:随机添加椒盐噪声和高斯噪声Python相关的知识,希望对你有一定的参考价值。



图像处理:随机添加椒盐噪声和高斯噪声Python

目录

图像处理:随机添加椒盐噪声和高斯噪声Python

1.常见的图像噪声

(1)高斯噪声

(2) 椒盐噪声

2.生成图像噪声

(1)高斯噪声

(2) 椒盐噪声(速度慢)

(3) 椒盐噪声(快速版)

3. Demo测试



        图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。在噪声的概念中,通常采用信噪比(Signal-Noise Rate, SNR)衡量图像噪声。通俗的讲就是信号占多少,噪声占多少,SNR越小,噪声占比越大。

【尊重原则,转载请注明出处】https://panjinquan.blog.csdn.net/article/details/126542210




1.常见的图像噪声


(1)高斯噪声

        高斯噪声Gaussian noise,是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声,通常是因为不良照明和高温引起的传感器噪声。


(2) 椒盐噪声

        椒盐噪声salt-and-pepper noise,又称为脉冲噪声,它是一种随机出现的白点(盐噪声)或者黑点(椒噪声),通常是由图像传感器,传输信道,解压处理等产生的黑白相间的亮暗点噪声(椒-黑,盐-白)。常用的去除这种噪声的有效手段是使用中值滤波器。





2.生成图像噪声

在原始图像基础上加上噪声分量,即可生成图像噪声


(1)高斯噪声

def gaussian_noise(image, mean=0.1, sigma=0.1):
"""
添加高斯噪声
:param image:原图
:param mean:均值
:param sigma:标准差 值越大,噪声越多
:return:噪声处理后的图片
"""
image = np.asarray(image / 255, dtype=np.float32) # 图片灰度标准化
noise = np.random.normal(mean, sigma, image.shape).astype(dtype=np.float32) # 产生高斯噪声
output = image + noise # 将噪声和图片叠加
output = np.clip(output, 0, 1)
output = np.uint8(output * 255)
return output

(2) 椒盐噪声(速度慢)

常规的方法,需要遍历每个像素,添加椒盐噪声,该方法十分缓慢。Python语言十分不建议进行图像像素遍历操作,毕竟性能太差,速度太慢了(除非写成C/C++版本)。我们可以借助numpy的矩阵处理,实现快速的添加椒盐噪声。

def salt_pepper_noise(image: np.ndarray, prob=0.01):
"""
添加椒盐噪声,该方法需要遍历每个像素,十分缓慢
:param image:
:param prob: 噪声比例
:return:
"""
for i in range(image.shape[0]):
for j in range(image.shape[1]):
if random.random() image[i][j] &#61; 0 if random.random() <0.5 else 255
else:
image[i][j] &#61; image[i][j]
return image

&#xff08;3&#xff09; 椒盐噪声&#xff08;快速版&#xff09;

我们可以借助numpy的矩阵处理&#xff0c;实现快速的添加椒盐噪声。基本思路&#xff1a;利用np.random.uniform生成0~1的均匀噪声&#xff08; uniform distribution noise&#xff09;&#xff0c;然后将noise > prob的像素设置0或者255&#xff0c;这样通过矩阵的处理&#xff0c;可以快速添加椒盐噪声。

def fast_salt_pepper_noise(image: np.ndarray, prob&#61;0.02):
"""
随机生成一个0~1的mask&#xff0c;作为椒盐噪声
:param image:图像
:param prob: 椒盐噪声噪声比例
:return:
"""
image &#61; add_uniform_noise(image, prob * 0.51, vaule&#61;255)
image &#61; add_uniform_noise(image, prob * 0.5, vaule&#61;0)
return image
def add_uniform_noise(image: np.ndarray, prob&#61;0.05, vaule&#61;255):
"""
随机生成一个0~1的mask&#xff0c;作为椒盐噪声
:param image:图像
:param prob: 噪声比例
:param vaule: 噪声值
:return:
"""
h, w &#61; image.shape[:2]
noise &#61; np.random.uniform(low&#61;0.0, high&#61;1.0, size&#61;(h, w)).astype(dtype&#61;np.float32) # 产生高斯噪声
mask &#61; np.zeros(shape&#61;(h, w), dtype&#61;np.uint8) &#43; vaule
index &#61; noise > prob
mask &#61; mask * (~index)
output &#61; image * index[:, :, np.newaxis] &#43; mask[:, :, np.newaxis]
output &#61; np.clip(output, 0, 255)
output &#61; np.uint8(output)
return output

3. Demo性能测试

需要用到pybaseutils工具&#xff0c;pip安装即可

# -*-coding: utf-8 -*-
"""
&#64;Author : panjq
&#64;E-mail : pan_jinquan&#64;163.com
&#64;Date : 2022-07-27 15:23:24
&#64;Brief :
"""
import cv2
import random
import numpy as np
from pybaseutils import time_utils
&#64;time_utils.performance("gaussian_noise")
def gaussian_noise(image, mean&#61;0.1, sigma&#61;0.1):
"""
添加高斯噪声
:param image:原图
:param mean:均值
:param sigma:标准差 值越大&#xff0c;噪声越多
:return:噪声处理后的图片
"""
image &#61; np.asarray(image / 255, dtype&#61;np.float32) # 图片灰度标准化
noise &#61; np.random.normal(mean, sigma, image.shape).astype(dtype&#61;np.float32) # 产生高斯噪声
output &#61; image &#43; noise # 将噪声和图片叠加
output &#61; np.clip(output, 0, 1)
output &#61; np.uint8(output * 255)
return output
&#64;time_utils.performance("salt_pepper_noise")
def salt_pepper_noise(image: np.ndarray, prob&#61;0.01):
"""
添加椒盐噪声&#xff0c;该方法需要遍历每个像素&#xff0c;十分缓慢
:param image:
:param prob: 噪声比例
:return:
"""
for i in range(image.shape[0]):
for j in range(image.shape[1]):
if random.random() image[i][j] &#61; 0 if random.random() <0.5 else 255
else:
image[i][j] &#61; image[i][j]
return image
&#64;time_utils.performance("fast_salt_pepper_noise")
def fast_salt_pepper_noise(image: np.ndarray, prob&#61;0.02):
"""
随机生成一个0~1的mask&#xff0c;作为椒盐噪声
:param image:图像
:param prob: 椒盐噪声噪声比例
:return:
"""
image &#61; add_uniform_noise(image, prob * 0.51, vaule&#61;255)
image &#61; add_uniform_noise(image, prob * 0.5, vaule&#61;0)
return image
def add_uniform_noise(image: np.ndarray, prob&#61;0.05, vaule&#61;255):
"""
随机生成一个0~1的mask&#xff0c;作为椒盐噪声
:param image:图像
:param prob: 噪声比例
:param vaule: 噪声值
:return:
"""
h, w &#61; image.shape[:2]
noise &#61; np.random.uniform(low&#61;0.0, high&#61;1.0, size&#61;(h, w)).astype(dtype&#61;np.float32) # 产生高斯噪声
mask &#61; np.zeros(shape&#61;(h, w), dtype&#61;np.uint8) &#43; vaule
index &#61; noise > prob
mask &#61; mask * (~index)
output &#61; image * index[:, :, np.newaxis] &#43; mask[:, :, np.newaxis]
output &#61; np.clip(output, 0, 255)
output &#61; np.uint8(output)
return output
def cv_show_image(title, image, use_rgb&#61;True, delay&#61;0):
"""
调用OpenCV显示RGB图片
:param title: 图像标题
:param image: 输入是否是RGB图像
:param use_rgb: True:输入image是RGB的图像, False:返输入image是BGR格式的图像
:return:
"""
img &#61; image.copy()
if img.shape[-1] &#61;&#61; 3 and use_rgb:
img &#61; cv2.cvtColor(img, cv2.COLOR_RGB2BGR) # 将BGR转为RGB
# cv2.namedWindow(title, flags&#61;cv2.WINDOW_AUTOSIZE)
cv2.namedWindow(title, flags&#61;cv2.WINDOW_NORMAL)
cv2.imshow(title, img)
cv2.waitKey(delay)
return img
if __name__ &#61;&#61; "__main__":
test_file &#61; "test.png"
image &#61; cv2.imread(test_file)
prob &#61; 0.02
for i in range(10):
out1 &#61; gaussian_noise(image.copy())
out2 &#61; salt_pepper_noise(image.copy(), prob&#61;prob)
out3 &#61; fast_salt_pepper_noise(image.copy(), prob&#61;prob)
print("----" * 10)
cv_show_image("image", image, use_rgb&#61;False, delay&#61;1)
cv_show_image("gaussian_noise", out1, use_rgb&#61;False, delay&#61;1)
cv_show_image("salt_pepper_noise", out2, use_rgb&#61;False, delay&#61;1)
cv_show_image("fast_salt_pepper_noise", out3, use_rgb&#61;False, delay&#61;0)

循环机10次&#xff0c;salt_pepper_noise平均耗时125.49021ms&#xff0c;而fast_salt_pepper_noise平均耗时6.12011ms &#xff0c;性能提高60倍左右&#xff0c;其生成的效果是基本一致的



call gaussian_noise elapsed: avg:19.42925ms     total:194.29255ms     count:10
call salt_pepper_noise elapsed: avg:125.49021ms     total:1254.90212ms     count:10
call fast_salt_pepper_noise elapsed: avg:6.12011ms     total:61.20110ms     count:10 



原图高斯噪声

salt_pepper_noise

fast_salt_pepper_noise





推荐阅读
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文介绍了在安装或运行 Python 项目时遇到的 'ModuleNotFoundError: No module named setuptools_rust' 错误,并提供了解决方案。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文介绍如何使用 Python 编写程序,检查给定列表中的元素是否形成交替峰值模式。我们将探讨两种不同的方法来实现这一目标,并提供详细的代码示例。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
author-avatar
宁艺汉先生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有